<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="../style.css" type="text/css" media="all" />
<body>
<h1>1.1. Основы работы модулей</h1>

<h2>ЧПУ</h2>
<div>
	<p>Основное правило: <i>http://example.com/латинское_название_модуля/название_метода</i></p>
	
	<p>Все виртуальные каталоги, следующие после названия метода в массиве $_REQUEST будут
	иметь ключи типа <i>paramN</i>, где N - порядок виртуального каталога (начинается с 0).
	Так же виртуальный каталог с названием типа <i>pageN</i>, где N - число, в массиве $_REQUEST
	будет иметь ключ <i>page</i>, а значение - соответствующую цифру.</p>
	<p>Например массив $_REQUEST при URI <i>http://example.com/blogs/blog/cms/page1/someparametr</i>
	будет следующим:</p>
</div>

<div class="sample">
<div class="sample_content">
<code><span style="color: #000000"> Array<br />(<br />&nbsp;&nbsp;&nbsp;&nbsp;[u]&nbsp;=&gt;&nbsp;http://example.com/blogs/blog/cms/someparametr/page23<br />&nbsp;&nbsp;&nbsp;&nbsp;[param0]&nbsp;=&gt;&nbsp;cms<br />&nbsp;&nbsp;&nbsp;&nbsp;[param1]&nbsp;=&gt;&nbsp;someparametr<br />&nbsp;&nbsp;&nbsp;&nbsp;[page]&nbsp;=&gt;&nbsp;23<br />)<br /></span> </code>
</div>
</div>

<h2>Файловая структура модулей</h2>
<div>
	<p>Все основные файлы модулей (PHP-скрипты и шаблоны) находятся в двух каталогах:
	<i>~/explay/modules</i> и <i>~/explay/templates</i>. В первом каталоге хранятся PHP-скрипты модулей,
	во втором - шаблоны. Имя конкретного каталога, где хранятся скрипты модуля должно
	совпадать с латинским названием модуля, например, <i>~/explay/modules/blogs</i> -
	модуль блогов (blogs). JavaScript, CSS и изображения могут находится в различных
	каталогах сайта на усмотрение разработчика (в основном это <i>~/js</i> и <i>~/css</i>).</p>
</div>

<h2>Классы модулей</h2>
<div>
	<p>Весь функционал модулей реализуется в соотвествующих классах. Названия классов должны
	совпадать с латинским названием модуля, например, <code>class blogs extends Module {}</code>
	- класс модуля блогов (blogs). Обратите внимание, что класс модуля должен <b>обязательно</b>
	наследоваться от класса Module.
	Публичные не статические методы класса являются <b>методами модуля</b>, к которым может
	обращаться пользователь. Класс модуля должен находится
	в его персональном каталоге в файле с именем class.php. Обязательным методом для
	каждого класса модуля является метод <i>__default</i> (без параметров), который
	вызывается по-умолчанию, если пользователем не задан нужный метод.</p>

	<p>Для работы в режиме панели администратора вместо <i>class.php</i> CMS работает
	с файлом <i>admin.php</i>. Этот файл фактически является отдельной релизацией
	модуля для панели администратора, т.к. работает он точно так же как <i>class.php</i>.</p>
</div>

<h2>"Ответы" модулей</h2>
<div>
	<p>При вызове метода модуля методом класса обязательно должен возвращаться объект
	класса ModuleResponse. Объект этого класса может содержать в себе другие
	объекты, экземпляры классов Object, Form, Array2XML и т.д.</p>
	<p>Подробнее в разделе 1.3: <a href="xml_responses.html">XML-таблицы ответов модулей</a>.</p>
</div>

<h2>Локализация (i18n)</h2>
<div>
	<p>Файл с языковыми настройками модуля должен находится в одном каталоге с ним.
	При инициализации (загрузке) модуля он загружается автоматически;
	языковым константам задается подкатегория с латинским названием модуля.
	В PHP-коде этого файла должен быть определен массив <i>$LANG</i>, где индексы и значение - это
	названия и значения языковых констант соответсвенно.</p>
	
	<p>Имя язвкового файла формируется исходя из настроек в
	<i>~/explay/config.php</i> (константа <i>LANG</i>), это теоретически позволяет использовать
	несколько языков на одном сайте. Например <i>i18n.ru.php</i>.</p>
	
	<p>Для переопределения языковых констант может использоваться файл с именем <i>i18n.ru.custom.php</i>.</p>
</div>

<a name="access"></a>
<h2>Права доступа</h2>
<div>
	<p>В Explay CMS 3.x система прав доступа контролирует только отдельные методы, а не модули
	полностью. В системе существует три группы пользователей: администраторы, модераторы,
	зарегистрированные пользователи и гости (admin, moderator, user, guest).
	Метод модуля может быть сконфигурирован,
	допуская обращение к нему определенных групп пользователей или только самой системы.
	Настройки доступа к методам (файл <i>premissions.php</i>) должны находится в одном каталоге с модулем.
	В PHP-коде этого файла должен быть объявлен массив
	<i>$PREMISSIONS</i>, в котором ключи и значения - названия методов и массивы настроек соответсвенно.
	В массиве настроек допустимы следующие пары ключ-значение: <b>group</b> - группы пользователей,
	<b>macros</b> - отметка метода как макрос (если значение этого ключа установлено в true, то к методу будет
	невозможно обратиться через URI).</p>
	
	<p>Для переопределения настроек методов модуля может использоваться файл <i>permissions.custom.php</i>.</p>
	
	<p>Пример файла <i>premissions.php:</i></p>
</div>
<div class="sample">
<div class="sample_content">
<code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php <br /> <br />$PREMISSIONS&nbsp;</span><span style="color: #007700">=&nbsp;array&nbsp;( <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'my_method'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array&nbsp;( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'group'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array&nbsp;(</span><span style="color: #DD0000">'admin'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'moderator'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'user'</span><span style="color: #007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;), <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'my_methos-macros'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array&nbsp;( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'macros'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'group'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array&nbsp;(</span><span style="color: #DD0000">'admin'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'moderator'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'user'</span><span style="color: #007700">) <br />&nbsp;&nbsp;&nbsp;&nbsp;) <br />); <br /> <br /></span><span style="color: #0000BB">?&gt;</span>&nbsp;</span> </code>   
</div>
</div>

<h2>Обновления CMS и модулей</h2>
<div>
	<p>При обновлении CMS обновляются PHP-файлы стандартных модулей. Для избежания удаления внесенных сторонним
	разработчиком изменений в код модулей, изначально созданы файлы <i>__custom_название-модуля.php</i>,
	<i>i18n.ru.custom.php</i>, <i>permissions.custom.php</i>, которые находятся в каталогах модулей.
	Эти файлы можно использовать для переопределения методов модулей, языковых констант и настроек
	доступа, при этом они никогда не будут изменены при обновлении.</p>
</div>

</body>
</html>